﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAO;
using DTO;
using BUS;
namespace GUI
{
    public partial class PhieuTraSach : UserControl
    {
        int stt1 = 0;
        int stt2 = 0;
        String incompleteMPT = "PTS" + DateTime.Now.Day.ToString().PadLeft(2, '0') + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Year.ToString().Substring(2, 2);

        public PhieuTraSach()
        {
            InitializeComponent();
        }

        private void PhieuTraSach_Load(object sender, EventArgs e)
        {
            btnGenerate.Enabled = false;
            groupBox5.Enabled = false;
            cmbSachtra.DataSource = CuonSachDAO.TimMaSachDaMuon();
            cmbSachtra.DisplayMember = "MaSach";
            dataGridViewX1.DataSource = PhieuTraSachBUS.TimTatCaPTS();
        }
        private void cmbSachtra_LostFocus(object sender, EventArgs e){
            tbTuade.Text = CuonSachDAO.TimTenSachTuMaSach(cmbSachtra.Text);
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (cmbSachtra.Text.Length != 11)
            {
                MessageBox.Show("Vui lòng điền đầy đúng mã sách cần thêm", "Nhắc nhở", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            foreach (ListViewItem lvitem in listViewEx1.Items)
            {
                if (lvitem.SubItems[1].ToString() == cmbSachtra.Text)
                {
                    MessageBox.Show("Không thể thêm vào danh sách đợi! Mã sách bị trùng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            ListViewItem lvi = new ListViewItem();
            lvi.Text = (++stt1).ToString();
            lvi.SubItems.Add(cmbSachtra.Text);
            listViewEx1.Items.Add(lvi);
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            if (listViewEx1.SelectedItems.Count == 0)
            {
                return;
            }
            foreach (ListViewItem lvi in listViewEx1.SelectedItems)
            {
                listViewEx1.Items.Remove(lvi);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (listViewEx1.Items.Count > 0)
            {
                btnGenerate.Enabled = true;
            }
            else{

                btnGenerate.Enabled = false;
            }
            if (dataGridViewX1.SelectedRows.Count == 0)
                groupBox5.Enabled = false;
            else groupBox5.Enabled = true;
        }

        private void btnGenerate_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem lvi in listViewEx1.Items)
            {
                ChiTietPhieuTraSachDTO chitiet = new ChiTietPhieuTraSachDTO();
                chitiet.MaTaiLieu = lvi.SubItems[1].Text;
                chitiet.SoNgayTre = ChiTietPhieuTraSachDAO.TinhSoNgayTreCuaTaiLieu(chitiet.MaTaiLieu);
                chitiet.TienPhat = chitiet.SoNgayTre * StaticVariables.TienPhat;
                //Xac dinh xem nen dat chi tiet nay ma phieu tra la gi
                string nguoimuon = DocGiaDAO.TimNguoiMuonTaiLieu(chitiet.MaTaiLieu);
                String tmpphieutra = PhieuTraSachDAO.TimPhieuTraBangNguoiVaNgay(nguoimuon, DateTime.Now);
                if (tmpphieutra == "")
                {
                    // Tao moi phieu tra va add vao csdl
                    PhieuTraSachDTO tmp = new PhieuTraSachDTO();
                    tmp.MaPT = TaoMaPT();
                    tmp.NgayTra = DateTime.Now;
                    tmp.SoThe = nguoimuon;
                    tmp.TongTienPhat = 0;
                    if (!PhieuTraSachBUS.ThemPhieuTraSach(tmp))
                    {
                        MessageBox.Show("Thêm phiếu trả thất bại tại mã sách " + chitiet.MaTaiLieu + "\nTiến trình bị dừng, vui lòng kiểm tra lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    chitiet.MaPhieuTra = tmp.MaPT;
                }
                else chitiet.MaPhieuTra = tmpphieutra;
                // them chi tiet phieu tra sach vao csdl
                if (!ChiTietPhieuTraSachBUS.ThemChiTietPTS(chitiet))
                {
                    MessageBox.Show("Thêm chi tiết phiếu trả thất bại tại mã sách " + chitiet.MaTaiLieu + "\nTiến trình bị dừng, vui lòng kiểm tra lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                listViewEx1.Items.Remove(lvi);
                // Add them cai preview
                ListViewItem lvitem = new ListViewItem();
                lvitem.Text = (++stt2).ToString();
                lvitem.SubItems.Add(chitiet.MaPhieuTra);
                lvitem.SubItems.Add(nguoimuon);
                listViewEx2.Items.Add(lvitem);
            }
            dataGridViewX1.DataSource = PhieuTraSachBUS.TimTatCaPTS();
        }
        private String TaoMaPT(){
            Random rd = new Random();
            string mapt;
            do 
            {
                mapt = incompleteMPT + rd.Next(1,999).ToString().PadLeft(3,'0');
                if (mapt.Length != 12)
                {
                    return "";
                }
            } while (PhieuTraSachDAO.CheckPTSByID(mapt));
            return mapt;
        }

        private void dataGridViewX1_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                dataGridViewX2.DataSource = ChiTietPhieuTraSachBUS.TimChiTietPTSByPhieuTra(dataGridViewX1.SelectedRows[0].Cells[0].Value.ToString());
            }
            catch (System.Exception ex)
            {
            	
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (dataGridViewX1.SelectedRows.Count == 0)
            {
                return;
            }
            PhieuTraSachDTO phieutra = new PhieuTraSachDTO();
            phieutra.MaPT = dataGridViewX1.SelectedRows[0].Cells[0].Value.ToString();
            phieutra.NgayTra = DateTime.Parse(dataGridViewX1.SelectedRows[0].Cells[3].Value.ToString());
            phieutra.SoThe = dataGridViewX1.SelectedRows[0].Cells[1].Value.ToString();
            phieutra.TongTienPhat = decimal.Parse(dataGridViewX1.SelectedRows[0].Cells[4].Value.ToString());
            if (!PhieuTraSachBUS.SuaPhieuTraSach(phieutra))
            {
                MessageBox.Show("Sửa thất bại!");
                return;
            }
            MessageBox.Show("Sửa thành công!");
            dataGridViewX1.DataSource = PhieuTraSachBUS.TimTatCaPTS();
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (dataGridViewX1.SelectedRows.Count == 0)
            {
                return;
            }
            if (!PhieuTraSachBUS.XoaPhieuTraSach(dataGridViewX1.SelectedRows[0].Cells[0].Value.ToString()))
            {
                MessageBox.Show("Xóa thất bại!");
                return;
            }
            MessageBox.Show("Xóa thành công!");
            dataGridViewX1.DataSource = PhieuTraSachBUS.TimTatCaPTS();
        }

        private void btnXoaChiTiet_Click(object sender, EventArgs e)
        {
            if (dataGridViewX2.SelectedRows.Count == 0)
            {
                return;
            }
            string mapt = dataGridViewX2.SelectedRows[0].Cells[0].Value.ToString();
            string matl = dataGridViewX2.SelectedRows[0].Cells[1].Value.ToString();
            if (!ChiTietPhieuTraSachBUS.XoaChiTietPTS(mapt, matl))
            {
                MessageBox.Show("Xóa thất bại!");
                return;
            }
            MessageBox.Show("Xóa thành công!");
            dataGridViewX2.DataSource = ChiTietPhieuTraSachBUS.TimChiTietPTSByPhieuTra(mapt);
        }
    }
}
